// 优先级队列的封装
function PriorityQueue() {
  // 在PriorityQueue重新创建了一个类:存放元素和优先级 --数字小的,最先执行
  function QueueElement(element, priority) {
    this.element = element; //元素
    this.priority = priority; //优先级
  }

  //封装属性
  this.items = [];

  //实现插入方法
  PriorityQueue.prototype.enqueue = function (element, priority) {
    //1,创建QueueElement对象
    var queueElement = new QueueElement(element, priority);
    //2.判断队列是否为空
    if (this.items.length == 0) {
      this.items.push(queueElement);
    } else {
      let added = false; //添加一个变量,判断是不是有插入
      for (let i = 0; i < this.items.length; i++) {
        if (queueElement.priority < this.items[i].priority) {
          this.items.splice(i, 0, queueElement);
          added = true;
          break;
        }
      }
      if (!added) {
        this.items.push(queueElement); //放到最后面
      }
    }
  };

  //2.从队列中删除前端元素
  PriorityQueue.prototype.dequeue = function () {
    // 删除数组第一个元素,所以性能不高
    return this.items.shift();
  };
  //3.查看前端的元素
  PriorityQueue.prototype.front = function () {
    return this.items[0];
  };
  //4.查看队列是否为空
  PriorityQueue.prototype.isEmpty = function () {
    return this.items.length == 0;
  };
  //5.查看队列中元素的个数
  PriorityQueue.prototype.size = function () {
    return this.items.length;
  };
  //6.toString方法
  PriorityQueue.prototype.toString = function () {
    let resultString = "";
    for (let i = 0; i < this.items.length; i++) {
      resultString +=
        this.items[i].element + "-" + this.items[i].priority + " ";
    }
    return resultString;
  };
}

// 测试代码
let pq = new PriorityQueue();
pq.enqueue("abc", 111);
pq.enqueue("cba", 200);
pq.enqueue("nba", 50);
pq.enqueue("nba", 66);
console.log(pq.front());
console.log(pq.isEmpty());
console.log(pq.toString());
console.log(pq.items);
